home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Presentations / Presentations ’88 / Feldt Advanced Mac Programming / List Manager / ICONLDEF.c < prev    next >
C/C++ Source or Header  |  1988-06-13  |  1KB  |  57 lines

  1. #include <ListMgr.h>
  2.  
  3. pascal void    main(lMessage,lSelect,lRect,lCell,lDataOffset,lDataLen,lHandle)
  4. int            lMessage;
  5. Boolean        lSelect;
  6. Rect            *lRect;
  7. Cell            lCell;
  8. int            lDataOffset,lDataLen;
  9. ListHandle    lHandle;
  10. {
  11.     BitMap    iconBits;
  12.     Rect    srcRect,destRect;
  13.     char    hState;
  14.  
  15.     /* set the iconBits boundsRect to the rectangle argument */
  16.     iconBits.bounds = *lRect;
  17.     srcRect.top = lRect->top;
  18.     srcRect.left = lRect->left;
  19.     srcRect.bottom = lRect->top + 32;
  20.     srcRect.right = lRect->left + 32;
  21.     destRect.top = lRect->top;
  22.     destRect.left = lRect->left;
  23.     destRect.bottom = lRect->top + (**lHandle).cellSize.v;
  24.     destRect.right = lRect->left + (**lHandle).cellSize.h;
  25.  
  26.     switch (lMessage) {
  27.       case lInitMsg:
  28.           break;
  29.  
  30.       case lDrawMsg:
  31.           if (lDataLen > 0) {
  32.               hState = HGetState((**lHandle).cells);
  33.             HLock((**lHandle).cells);
  34.               iconBits.baseAddr = (Ptr)(*((**lHandle).cells)) + (long)lDataOffset;
  35.               iconBits.rowBytes = 4;
  36.  
  37.               CopyBits(&iconBits,&(((**lHandle).port)->portBits),&srcRect,&destRect,srcCopy,(long)0);
  38.               HSetState((**lHandle).cells,hState);
  39.           }
  40.           else
  41.               EraseRect(lRect);
  42.  
  43.         /* stop if no selection is needed */
  44.         if (!lSelect)
  45.               break;
  46.  
  47.       /* otherwise, fall through to... */
  48.       case lHiliteMsg:
  49.           InvertRect(lRect);
  50.           break;
  51.  
  52.       case lCloseMsg:
  53.           break;
  54.     }
  55. }
  56.  
  57.